↳ Prolog
↳ PrologToPiTRSProof
merge_in(.(A, X), .(B, Y), .(B, Z)) → U3(A, X, B, Y, Z, gt_in(A, B))
gt_in(s(X), zero) → gt_out(s(X), zero)
gt_in(s(X), s(Y)) → U5(X, Y, gt_in(X, Y))
U5(X, Y, gt_out(X, Y)) → gt_out(s(X), s(Y))
U3(A, X, B, Y, Z, gt_out(A, B)) → U4(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
merge_in(.(A, X), .(B, Y), .(A, Z)) → U1(A, X, B, Y, Z, le_in(A, B))
le_in(zero, zero) → le_out(zero, zero)
le_in(zero, s(Y)) → le_out(zero, s(Y))
le_in(s(X), s(Y)) → U6(X, Y, le_in(X, Y))
U6(X, Y, le_out(X, Y)) → le_out(s(X), s(Y))
U1(A, X, B, Y, Z, le_out(A, B)) → U2(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
merge_in([], X, X) → merge_out([], X, X)
merge_in(X, [], X) → merge_out(X, [], X)
U2(A, X, B, Y, Z, merge_out(X, .(B, Y), Z)) → merge_out(.(A, X), .(B, Y), .(A, Z))
U4(A, X, B, Y, Z, merge_out(.(A, X), Y, Z)) → merge_out(.(A, X), .(B, Y), .(B, Z))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
merge_in(.(A, X), .(B, Y), .(B, Z)) → U3(A, X, B, Y, Z, gt_in(A, B))
gt_in(s(X), zero) → gt_out(s(X), zero)
gt_in(s(X), s(Y)) → U5(X, Y, gt_in(X, Y))
U5(X, Y, gt_out(X, Y)) → gt_out(s(X), s(Y))
U3(A, X, B, Y, Z, gt_out(A, B)) → U4(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
merge_in(.(A, X), .(B, Y), .(A, Z)) → U1(A, X, B, Y, Z, le_in(A, B))
le_in(zero, zero) → le_out(zero, zero)
le_in(zero, s(Y)) → le_out(zero, s(Y))
le_in(s(X), s(Y)) → U6(X, Y, le_in(X, Y))
U6(X, Y, le_out(X, Y)) → le_out(s(X), s(Y))
U1(A, X, B, Y, Z, le_out(A, B)) → U2(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
merge_in([], X, X) → merge_out([], X, X)
merge_in(X, [], X) → merge_out(X, [], X)
U2(A, X, B, Y, Z, merge_out(X, .(B, Y), Z)) → merge_out(.(A, X), .(B, Y), .(A, Z))
U4(A, X, B, Y, Z, merge_out(.(A, X), Y, Z)) → merge_out(.(A, X), .(B, Y), .(B, Z))
MERGE_IN(.(A, X), .(B, Y), .(B, Z)) → U31(A, X, B, Y, Z, gt_in(A, B))
MERGE_IN(.(A, X), .(B, Y), .(B, Z)) → GT_IN(A, B)
GT_IN(s(X), s(Y)) → U51(X, Y, gt_in(X, Y))
GT_IN(s(X), s(Y)) → GT_IN(X, Y)
U31(A, X, B, Y, Z, gt_out(A, B)) → U41(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
U31(A, X, B, Y, Z, gt_out(A, B)) → MERGE_IN(.(A, X), Y, Z)
MERGE_IN(.(A, X), .(B, Y), .(A, Z)) → U11(A, X, B, Y, Z, le_in(A, B))
MERGE_IN(.(A, X), .(B, Y), .(A, Z)) → LE_IN(A, B)
LE_IN(s(X), s(Y)) → U61(X, Y, le_in(X, Y))
LE_IN(s(X), s(Y)) → LE_IN(X, Y)
U11(A, X, B, Y, Z, le_out(A, B)) → U21(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
U11(A, X, B, Y, Z, le_out(A, B)) → MERGE_IN(X, .(B, Y), Z)
merge_in(.(A, X), .(B, Y), .(B, Z)) → U3(A, X, B, Y, Z, gt_in(A, B))
gt_in(s(X), zero) → gt_out(s(X), zero)
gt_in(s(X), s(Y)) → U5(X, Y, gt_in(X, Y))
U5(X, Y, gt_out(X, Y)) → gt_out(s(X), s(Y))
U3(A, X, B, Y, Z, gt_out(A, B)) → U4(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
merge_in(.(A, X), .(B, Y), .(A, Z)) → U1(A, X, B, Y, Z, le_in(A, B))
le_in(zero, zero) → le_out(zero, zero)
le_in(zero, s(Y)) → le_out(zero, s(Y))
le_in(s(X), s(Y)) → U6(X, Y, le_in(X, Y))
U6(X, Y, le_out(X, Y)) → le_out(s(X), s(Y))
U1(A, X, B, Y, Z, le_out(A, B)) → U2(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
merge_in([], X, X) → merge_out([], X, X)
merge_in(X, [], X) → merge_out(X, [], X)
U2(A, X, B, Y, Z, merge_out(X, .(B, Y), Z)) → merge_out(.(A, X), .(B, Y), .(A, Z))
U4(A, X, B, Y, Z, merge_out(.(A, X), Y, Z)) → merge_out(.(A, X), .(B, Y), .(B, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
MERGE_IN(.(A, X), .(B, Y), .(B, Z)) → U31(A, X, B, Y, Z, gt_in(A, B))
MERGE_IN(.(A, X), .(B, Y), .(B, Z)) → GT_IN(A, B)
GT_IN(s(X), s(Y)) → U51(X, Y, gt_in(X, Y))
GT_IN(s(X), s(Y)) → GT_IN(X, Y)
U31(A, X, B, Y, Z, gt_out(A, B)) → U41(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
U31(A, X, B, Y, Z, gt_out(A, B)) → MERGE_IN(.(A, X), Y, Z)
MERGE_IN(.(A, X), .(B, Y), .(A, Z)) → U11(A, X, B, Y, Z, le_in(A, B))
MERGE_IN(.(A, X), .(B, Y), .(A, Z)) → LE_IN(A, B)
LE_IN(s(X), s(Y)) → U61(X, Y, le_in(X, Y))
LE_IN(s(X), s(Y)) → LE_IN(X, Y)
U11(A, X, B, Y, Z, le_out(A, B)) → U21(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
U11(A, X, B, Y, Z, le_out(A, B)) → MERGE_IN(X, .(B, Y), Z)
merge_in(.(A, X), .(B, Y), .(B, Z)) → U3(A, X, B, Y, Z, gt_in(A, B))
gt_in(s(X), zero) → gt_out(s(X), zero)
gt_in(s(X), s(Y)) → U5(X, Y, gt_in(X, Y))
U5(X, Y, gt_out(X, Y)) → gt_out(s(X), s(Y))
U3(A, X, B, Y, Z, gt_out(A, B)) → U4(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
merge_in(.(A, X), .(B, Y), .(A, Z)) → U1(A, X, B, Y, Z, le_in(A, B))
le_in(zero, zero) → le_out(zero, zero)
le_in(zero, s(Y)) → le_out(zero, s(Y))
le_in(s(X), s(Y)) → U6(X, Y, le_in(X, Y))
U6(X, Y, le_out(X, Y)) → le_out(s(X), s(Y))
U1(A, X, B, Y, Z, le_out(A, B)) → U2(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
merge_in([], X, X) → merge_out([], X, X)
merge_in(X, [], X) → merge_out(X, [], X)
U2(A, X, B, Y, Z, merge_out(X, .(B, Y), Z)) → merge_out(.(A, X), .(B, Y), .(A, Z))
U4(A, X, B, Y, Z, merge_out(.(A, X), Y, Z)) → merge_out(.(A, X), .(B, Y), .(B, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
LE_IN(s(X), s(Y)) → LE_IN(X, Y)
merge_in(.(A, X), .(B, Y), .(B, Z)) → U3(A, X, B, Y, Z, gt_in(A, B))
gt_in(s(X), zero) → gt_out(s(X), zero)
gt_in(s(X), s(Y)) → U5(X, Y, gt_in(X, Y))
U5(X, Y, gt_out(X, Y)) → gt_out(s(X), s(Y))
U3(A, X, B, Y, Z, gt_out(A, B)) → U4(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
merge_in(.(A, X), .(B, Y), .(A, Z)) → U1(A, X, B, Y, Z, le_in(A, B))
le_in(zero, zero) → le_out(zero, zero)
le_in(zero, s(Y)) → le_out(zero, s(Y))
le_in(s(X), s(Y)) → U6(X, Y, le_in(X, Y))
U6(X, Y, le_out(X, Y)) → le_out(s(X), s(Y))
U1(A, X, B, Y, Z, le_out(A, B)) → U2(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
merge_in([], X, X) → merge_out([], X, X)
merge_in(X, [], X) → merge_out(X, [], X)
U2(A, X, B, Y, Z, merge_out(X, .(B, Y), Z)) → merge_out(.(A, X), .(B, Y), .(A, Z))
U4(A, X, B, Y, Z, merge_out(.(A, X), Y, Z)) → merge_out(.(A, X), .(B, Y), .(B, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
LE_IN(s(X), s(Y)) → LE_IN(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PiDP
LE_IN(s(X), s(Y)) → LE_IN(X, Y)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
GT_IN(s(X), s(Y)) → GT_IN(X, Y)
merge_in(.(A, X), .(B, Y), .(B, Z)) → U3(A, X, B, Y, Z, gt_in(A, B))
gt_in(s(X), zero) → gt_out(s(X), zero)
gt_in(s(X), s(Y)) → U5(X, Y, gt_in(X, Y))
U5(X, Y, gt_out(X, Y)) → gt_out(s(X), s(Y))
U3(A, X, B, Y, Z, gt_out(A, B)) → U4(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
merge_in(.(A, X), .(B, Y), .(A, Z)) → U1(A, X, B, Y, Z, le_in(A, B))
le_in(zero, zero) → le_out(zero, zero)
le_in(zero, s(Y)) → le_out(zero, s(Y))
le_in(s(X), s(Y)) → U6(X, Y, le_in(X, Y))
U6(X, Y, le_out(X, Y)) → le_out(s(X), s(Y))
U1(A, X, B, Y, Z, le_out(A, B)) → U2(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
merge_in([], X, X) → merge_out([], X, X)
merge_in(X, [], X) → merge_out(X, [], X)
U2(A, X, B, Y, Z, merge_out(X, .(B, Y), Z)) → merge_out(.(A, X), .(B, Y), .(A, Z))
U4(A, X, B, Y, Z, merge_out(.(A, X), Y, Z)) → merge_out(.(A, X), .(B, Y), .(B, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
GT_IN(s(X), s(Y)) → GT_IN(X, Y)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
GT_IN(s(X), s(Y)) → GT_IN(X, Y)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
MERGE_IN(.(A, X), .(B, Y), .(A, Z)) → U11(A, X, B, Y, Z, le_in(A, B))
U11(A, X, B, Y, Z, le_out(A, B)) → MERGE_IN(X, .(B, Y), Z)
MERGE_IN(.(A, X), .(B, Y), .(B, Z)) → U31(A, X, B, Y, Z, gt_in(A, B))
U31(A, X, B, Y, Z, gt_out(A, B)) → MERGE_IN(.(A, X), Y, Z)
merge_in(.(A, X), .(B, Y), .(B, Z)) → U3(A, X, B, Y, Z, gt_in(A, B))
gt_in(s(X), zero) → gt_out(s(X), zero)
gt_in(s(X), s(Y)) → U5(X, Y, gt_in(X, Y))
U5(X, Y, gt_out(X, Y)) → gt_out(s(X), s(Y))
U3(A, X, B, Y, Z, gt_out(A, B)) → U4(A, X, B, Y, Z, merge_in(.(A, X), Y, Z))
merge_in(.(A, X), .(B, Y), .(A, Z)) → U1(A, X, B, Y, Z, le_in(A, B))
le_in(zero, zero) → le_out(zero, zero)
le_in(zero, s(Y)) → le_out(zero, s(Y))
le_in(s(X), s(Y)) → U6(X, Y, le_in(X, Y))
U6(X, Y, le_out(X, Y)) → le_out(s(X), s(Y))
U1(A, X, B, Y, Z, le_out(A, B)) → U2(A, X, B, Y, Z, merge_in(X, .(B, Y), Z))
merge_in([], X, X) → merge_out([], X, X)
merge_in(X, [], X) → merge_out(X, [], X)
U2(A, X, B, Y, Z, merge_out(X, .(B, Y), Z)) → merge_out(.(A, X), .(B, Y), .(A, Z))
U4(A, X, B, Y, Z, merge_out(.(A, X), Y, Z)) → merge_out(.(A, X), .(B, Y), .(B, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
MERGE_IN(.(A, X), .(B, Y), .(A, Z)) → U11(A, X, B, Y, Z, le_in(A, B))
U11(A, X, B, Y, Z, le_out(A, B)) → MERGE_IN(X, .(B, Y), Z)
MERGE_IN(.(A, X), .(B, Y), .(B, Z)) → U31(A, X, B, Y, Z, gt_in(A, B))
U31(A, X, B, Y, Z, gt_out(A, B)) → MERGE_IN(.(A, X), Y, Z)
le_in(zero, zero) → le_out(zero, zero)
le_in(zero, s(Y)) → le_out(zero, s(Y))
le_in(s(X), s(Y)) → U6(X, Y, le_in(X, Y))
gt_in(s(X), zero) → gt_out(s(X), zero)
gt_in(s(X), s(Y)) → U5(X, Y, gt_in(X, Y))
U6(X, Y, le_out(X, Y)) → le_out(s(X), s(Y))
U5(X, Y, gt_out(X, Y)) → gt_out(s(X), s(Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
U11(A, X, B, Y, le_out) → MERGE_IN(X, .(B, Y))
MERGE_IN(.(A, X), .(B, Y)) → U11(A, X, B, Y, le_in(A, B))
MERGE_IN(.(A, X), .(B, Y)) → U31(A, X, B, Y, gt_in(A, B))
U31(A, X, B, Y, gt_out) → MERGE_IN(.(A, X), Y)
le_in(zero, zero) → le_out
le_in(zero, s(Y)) → le_out
le_in(s(X), s(Y)) → U6(le_in(X, Y))
gt_in(s(X), zero) → gt_out
gt_in(s(X), s(Y)) → U5(gt_in(X, Y))
U6(le_out) → le_out
U5(gt_out) → gt_out
le_in(x0, x1)
gt_in(x0, x1)
U6(x0)
U5(x0)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
U31(A, X, B, Y, gt_out) → MERGE_IN(.(A, X), Y)
Used ordering: Combined order from the following AFS and order.
U11(A, X, B, Y, le_out) → MERGE_IN(X, .(B, Y))
MERGE_IN(.(A, X), .(B, Y)) → U11(A, X, B, Y, le_in(A, B))
MERGE_IN(.(A, X), .(B, Y)) → U31(A, X, B, Y, gt_in(A, B))
[U1^12, leout, .2, U3^12] > [gtin, gtout]
zero > [gtin, gtout]
s > U61 > [gtin, gtout]
U61: multiset
leout: multiset
zero: multiset
U3^12: multiset
U1^12: multiset
s: multiset
.2: multiset
gtin: []
gtout: multiset
gt_in(s(X), zero) → gt_out
U5(gt_out) → gt_out
gt_in(s(X), s(Y)) → U5(gt_in(X, Y))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
MERGE_IN(.(A, X), .(B, Y)) → U11(A, X, B, Y, le_in(A, B))
U11(A, X, B, Y, le_out) → MERGE_IN(X, .(B, Y))
MERGE_IN(.(A, X), .(B, Y)) → U31(A, X, B, Y, gt_in(A, B))
le_in(zero, zero) → le_out
le_in(zero, s(Y)) → le_out
le_in(s(X), s(Y)) → U6(le_in(X, Y))
gt_in(s(X), zero) → gt_out
gt_in(s(X), s(Y)) → U5(gt_in(X, Y))
U6(le_out) → le_out
U5(gt_out) → gt_out
le_in(x0, x1)
gt_in(x0, x1)
U6(x0)
U5(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
U11(A, X, B, Y, le_out) → MERGE_IN(X, .(B, Y))
MERGE_IN(.(A, X), .(B, Y)) → U11(A, X, B, Y, le_in(A, B))
le_in(zero, zero) → le_out
le_in(zero, s(Y)) → le_out
le_in(s(X), s(Y)) → U6(le_in(X, Y))
gt_in(s(X), zero) → gt_out
gt_in(s(X), s(Y)) → U5(gt_in(X, Y))
U6(le_out) → le_out
U5(gt_out) → gt_out
le_in(x0, x1)
gt_in(x0, x1)
U6(x0)
U5(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
U11(A, X, B, Y, le_out) → MERGE_IN(X, .(B, Y))
MERGE_IN(.(A, X), .(B, Y)) → U11(A, X, B, Y, le_in(A, B))
le_in(zero, zero) → le_out
le_in(zero, s(Y)) → le_out
le_in(s(X), s(Y)) → U6(le_in(X, Y))
U6(le_out) → le_out
le_in(x0, x1)
gt_in(x0, x1)
U6(x0)
U5(x0)
gt_in(x0, x1)
U5(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ QDPSizeChangeProof
MERGE_IN(.(A, X), .(B, Y)) → U11(A, X, B, Y, le_in(A, B))
U11(A, X, B, Y, le_out) → MERGE_IN(X, .(B, Y))
le_in(zero, zero) → le_out
le_in(zero, s(Y)) → le_out
le_in(s(X), s(Y)) → U6(le_in(X, Y))
U6(le_out) → le_out
le_in(x0, x1)
U6(x0)
From the DPs we obtained the following set of size-change graphs: